const path = require("path");
const fs = require("fs");
const http = require("http");
const server = http.createServer();
server.listen(3000, () => console.log("图书管理接口服务启动了"));

server.on("request", (req, res) => {
    // 获取请求的url和method
    let url = req.url;
    let method = req.method; // 得到的永远是大写的 GET 或者 POST

    // 先读取书籍信息
    let books = require(path.join(__dirname, "books.json")); // 得到一个JS数组
    // console.log(books);

    // 判断
    if (method === "GET" && url === "/api/getbooks") {
        // 满足这个条件，说明客户端希望得到所有的书籍数据
        // 读取所有的书籍
        // 把读取的结果响应给客户端
        res.setHeader("Content-Type", "text/html;charset=utf-8");
        // 组装数据
        let result = {
            status: 200,
            msg: "获取成功",
            data: books,
        };
        res.end(JSON.stringify(result));
    } else if (method === "GET" && url.startsWith("/api/delbook")) {
        // startsWith(参数) 判断是否以该参数开头
        // 满足这个条件，说明客户端希望删除一本书
        // 先读取书籍信息
        let books = require(path.join(__dirname, "books.json"));
        // 1. 获取id
        let id = req.url.replace(/\D/g, "");
        // console.log(id); // 得到字符串类型的数字
        // 2. 删除一本书
        // console.log(req.url); // /api/delbook?id=2
        // filter()是一个数组方法，它根据条件来过滤结果；会把满足条件的留下，不满足条件的过滤掉
        let result = books.filter((item) => item.id != id);
        console.log(result);
        // 把读取的结果响应给客户端
        res.setHeader("Content-Type", "text/html;charset=utf-8");
        // 把过滤后的结果，存放到books.json中即可
        fs.writeFile(
            path.join(__dirname, "books.json"),
            JSON.stringify(result),
            (err) => {
                if (err) {
                    console.log(err);
                    res.end(JSON.stringify({ status: 400, msg: "删除失败" }));
                } else {
                    res.end(JSON.stringify({ status: 200, msg: "删除成功" }));
                }
            }
        );
    } else if (method === "POST" && url === "/api/addbook") {
        // 满足这个条件，说明客户端希望得到所有的书籍数据
    } else {
        // 前面的条件都不满足，说明请求了一个不存在的接口
        res.writeHead(404, {
            "Content-Type": "text/html;charset=utf-8",
        });
        res.end("这个端口不存在！");
    }
});